package jp.co.menox.controller.tmserver.channel;

import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import jp.co.menox.tmcommon.common.DataConst;
import jp.co.menox.tmcommon.meta.LendingMeta;
import jp.co.menox.tmcommon.model.Lending;
import jp.co.menox.tmcommon.model.LendingHistory;
import jp.co.menox.tmserver.channel.MessageSender;
import jp.co.menox.tmserver.service.LendingHistoryService;

import org.slim3.controller.Controller;
import org.slim3.controller.Navigation;
import org.slim3.memcache.Memcache;

import com.google.appengine.api.channel.ChannelMessage;
import com.google.appengine.api.channel.ChannelService;
import com.google.appengine.api.channel.ChannelServiceFactory;

/**
 * 通信用チャネルの受信処理
 * @author
 *
 */
public class ReceiveMessageController extends Controller {

    @Override
    public Navigation run() throws Exception {
        String command = asString("command");
        if (command == null || command.isEmpty()) {
            return null;
        }
        long userId = asLong("userId");
        String message = asString("message");
        
        if (command.equals("init")) {
            // 初期処理：　TODOF: 本来は/_ah/channel/connected/で拾うべきだが、
            //           例外がでるため今回はここで対応。
            // ちなみにsingletonは使用できない（Hot Loadingのため）。
            
            // 現在接続中リスト：登録／上書き
            Map<Long, Date> activeList 
                = Memcache.<Map<Long, Date>>get(DataConst.SERVERKEY_CHANNEL_LIST);
            if (activeList == null) {
                activeList = Collections.synchronizedMap(new HashMap<Long, Date>());
            }
            activeList.put(userId, new Date());
            Memcache.put(DataConst.SERVERKEY_CHANNEL_LIST, activeList);

            // 最終更新した貸し出し状態：クリア
            Map<Long, Long> lastUpdateList 
                = Memcache.<Map<Long, Long>>get(DataConst.SERVERKEY_CHANNEL_LASTSTATUSCHANGEDMODEL);
            if (lastUpdateList == null) {
                lastUpdateList = Collections.synchronizedMap(new HashMap<Long, Long>());
            }
            lastUpdateList.remove(userId);
            Memcache.put(DataConst.SERVERKEY_CHANNEL_LASTSTATUSCHANGEDMODEL, lastUpdateList);
            
            MessageSender.sendCurrentModelList(userId);
        }
        
        // TODOF: 今回は、他のメッセージは想定していない
        
        return null;
    }

}
